mainloop: Don't create poll until we need to
authorColin Walters <walters@verbum.org>
Tue, 6 Mar 2012 13:10:33 +0000 (08:10 -0500)
committerColin Walters <walters@verbum.org>
Tue, 6 Mar 2012 16:59:06 +0000 (11:59 -0500)
This slightly optimizes the case where we speculatively create a
Mainloop we might not use.

src/ostbuild/pyostbuild/mainloop.py

index d56010b381a629b8342458968e09f6732c597c49..40a67be812dffb6aa47324cb1b12dfac5de8cd38 100644 (file)
@@ -25,7 +25,7 @@ class Mainloop(object):
     DEFAULT = None
     def __init__(self):
         self._running = True
-        self.poll = select.poll()
+        self.poll = None
         self._timeouts = []
         self._pid_watches = {}
         self._fd_callbacks = {}
@@ -38,7 +38,12 @@ class Mainloop(object):
             return cls.DEFAULT
         raise NotImplementedError("Unknown context %r" % (context, ))
 
+    def _ensure_poll(self):
+        if self.poll is None:
+            self.poll = select.poll()
+
     def watch_fd(self, fd, callback):
+        self._ensure_poll()
         self.poll.register(fd)
         self._fd_callbacks[fd] = callback
 
@@ -63,6 +68,7 @@ class Mainloop(object):
             if (min_timeout is None) or (ms < min_timeout):
                 min_timeout = ms
         origtime = time.time() * 1000
+        self._ensure_poll()
         fds = self.poll.poll(min_timeout)
         for fd in fds:
             self._fd_callbacks[fd]()